package com.syh.core.ddd.infrastructure.repository;

import cn.redscarf.commons.wrapper.Wrapper;
import com.syh.core.ddd.domain.Aggregate;

import java.io.Serializable;
import java.util.List;

public interface ReadRepo<Entity extends Aggregate<ID>, ID extends Serializable> extends Repository<Entity, ID> {

  /**
   * 一般使用orm框架实现 例如Hibenate 根据主键获取数据
   *
   * @return
   */
  <T> T getById(ID id);

  /**
   * 一般使用orm框架实现 例如Hibenate 根据条件获取数据
   *
   * @return
   */
  <T> T getOne(Wrapper wrapper);

  /**
   * 一般使用orm框架实现 例如Hibenate 根据条件获取数据
   *
   * @return
   */
  boolean contains(ID id);

  /**
   * 一般使用orm框架实现 例如Hibenate 根据条件获取数据
   *
   * @return
   */
  <T> List<T> getList(Wrapper wrapper);

  /**
   * 一般使用orm框架实现 例如Hibenate 根据条件获取数据
   *
   * @return
   */
  <T> List<T> findListPage(Wrapper wrapper, Integer startRow, Integer count);

  /**
   * 一般使用orm框架实现 例如Hibenate 获取数量
   *
   * @return
   */
  int getCount(Wrapper wrapper);
}
